﻿#ifndef STACK_H
#define STACK_H
#include <stack>
#include <iostream>
#include <string>
#include <sstream>
#include "Operation.h"
using namespace std;

#include "stack_global.h"

class STACKSHARED_EXPORT Stack
{

public:
    Stack();
    ~Stack();                          /**< 析构函数 */
    void setPostfix(string exp);       /**< 中缀表达式转后缀表达式接口 */
    void setCalResults();              /**< 表达式计算接口 */
    void clearPostfix();               /**< 清除 m_Postfix 容器中的后缀表达式接口 */
    double getResult();                /**< 获取计算结果接口 */
    string getPostfix();               /**< 获取后缀表达式接口 */


private:
    Operation* oper;                   /**< 指向Operation类的指针 */
    string m_Postfix;                  /**< 存储后缀表达式 */
    double m_Result;                   /**< 存储计算结果 */
    stack<char> opStack;               /**< 运算符栈 */
    int getPriority(const char ch);    /**< 定义运算符等级 */
    void toPostfix(string strExp);     /**< 中缀表达式转换成后缀表达式 */
    void calResults();                 /**< 计算后缀表达式 */
    double convertStringToDouble(const string &s);   /**< string转double */
};

#endif // STACK_H
